import { baseUrl } from "@/config/index.js"
// 此vm参数为页面的实例，可以通过它引用vuex中的变量
export const Request = (vm)=>{
    // 初始化请求配置
    uni.$uv.http.setConfig((config) => {
        /* config 为默认全局配置*/
        config.baseURL = baseUrl; /* 根域名 */
        return config
    })
	
	// 请求拦截
	uni.$uv.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
		if(config?.custom?.loading){
			uni.showLoading({
				title: "数据加载中",
				icon: "none",
				mask:true
			})
		}
		// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
	    config.data = config.data || {}
		// 根据custom参数中配置的是否需要token，添加对应的请求头
		if(config?.custom?.auth) {
			// 可以在此通过vm引用vuex中的变量，具体值在vm.$store.state中
			config.header.token = vm.$store.state.userInfo.token
		}
	    return config 
	}, config => { // 可使用async await 做异步操作
	    return Promise.reject(config)
	})
	
	// 响应拦截
	uni.$uv.http.interceptors.response.use((response) => {
	  if(response.config?.custom?.loading){
	    uni.hideLoading();
	  }
	
	  const data = response.data;  // 后端原始返回数据，如 { code, message, data }
	
	  // 自定义参数
	  const custom = response.config?.custom;
	
	  // 判断 code 是否为业务成功
	  if (data.code !== 1000) {
	    if (custom.toast !== false) {
	      uni.$uv.toast(data.message || '请求失败');
	    }
	
	    if (custom?.catch) {
	      return Promise.reject(data); // 允许进入 catch
	    } else {
	      return new Promise(() => {}); // 阻止进入 catch
	    }
	  }
	
	  // ✅ 返回完整结构，而不是 data.data
	  return data;
	
	}, (response) => {
	  if(response.config?.custom?.loading){
	    uni.hideLoading();
	  }
	
	  if(response.config?.custom?.toast !== false){
	    uni.$uv.toast(response.message || '网络错误');
	  }
	
	  return Promise.reject(response);
	});

}